package
{
	import flash.display.DisplayObject;
	import flash.events.EventDispatcher;
	import flash.events.IEventDispatcher;
	import flash.utils.Dictionary;
	
	public class Queue extends EventDispatcher
	{
		// 记录队列中的总元素数目
		private var childrenTotal:int;
		// 记录队列元素的动态数组
		private var data:Dictionary;
		
		public function Queue(target:IEventDispatcher=null)
		{
			// 存储队列中的元素
			data = new Dictionary(true);
			// 初始化默认队列数目为0
			childrenTotal = 0;
		}
		
		// 添加队列元素
		public function addItem(child:DisplayObject):DisplayObject
		{
			// 创建一个临时名字
			var name:String = child.name;
			// 用动态数组记录键和值
			data[name] = child;
			// 递增元素
			childrenTotal++;
			return child;
		}
		
		// 删除队列中某一个元素
		public function removeItem(child:DisplayObject):DisplayObject
		{
			// 通过键来搜索时候匹配，是就删除
			delete data[child.name];
			childrenTotal--;
			return child;
		}
		
		// 返回队列中的元素
		public function get numChildren():int
		{
			return childrenTotal;
		}
		
		// 通过名字搜索元素
		public function getChildByNumber(name:String):DisplayObject
		{
			return data[name];
		}
		
		// 返回队列中所在位置
		public function getChildIndex(child:DisplayObject):int
		{
			var index:int = 0;
			for each( var o:DisplayObject in data)
			{
				index++;
				if (o == data[child.name])
				{
					break;
				}
			}
			return index;
		}
	}
}